package com.micro.monitoring.util;//package com.ug.map.util;
//
//import android.Manifest;
//import android.app.Activity;
//import android.content.Context;
//import android.content.Intent;
//import android.content.pm.PackageManager;
//import android.net.Uri;
//import android.os.Build;
//import android.provider.Settings;
//import android.text.TextUtils;
//
//import androidx.annotation.NonNull;
//import androidx.core.app.ActivityCompat;
//import androidx.core.content.ContextCompat;
//import androidx.fragment.app.Fragment;
//
//
//
//import java.util.ArrayList;
//import java.util.HashMap;
//
//import com.ug.map.App;
//import com.ug.map.BasicConfirmButtonDialog;
//
//import static com.ug.map.util.PermissionCode.ACCESS_COARSE_LOCATION;
//import static com.ug.map.util.PermissionCode.ACCESS_FINE_LOCATION;
//import static com.ug.map.util.PermissionCode.BACK_LOCATION_PERMISSION;
//import static com.ug.map.util.PermissionCode.PERMISSION_CAMERA;
//import static com.ug.map.util.PermissionCode.PERMISSION_READ_EXTERNAL_STORAGE;
//import static com.ug.map.util.PermissionCode.PERMISSION_WRITE_EXTERNAL_STORAGE;
//import static com.ug.map.util.PermissionCode.READ_PHONE_STATE;
//
//
///**
// * 权限工具类
// * 关于targetSDKVersion与手机系统版本的说明：
// * 1、targetSDKVersion < 23 & 手机系统 < 6.0 ：安装时默认获得权限，且用户无法在安装App之后取消权限。
// * 2、targetSDKVersion < 23 & 手机系统 >= 6.0 ：安装时默认获得权限，但是用户可以在安装App完成后动态取消授权（取消时手机会弹出提醒，告诉用户这个是为旧版手机打造的应用，让用户谨慎操作）。
// * 3、targetSDKVersion >= 23 & 手机系统 < 6.0 ：安装时默认获得权限，且用户无法在安装App之后取消权限。
// * 4、targetSDKVersion >= 23 & 手机系统 >= 6.0 : 安装时不会获得权限，可以在运行时向用户申请权限。用户授权以后仍然可以在设置界面中取消授权，用户主动在设置界面取消后，在app运行过程中可能会出现crash。
// * 故而，需要对第4种情况进行特殊处理，使用前动态申请权限
// */
//public class PermissionUtil {
//    private static final String PACKAGE_HEADER = "package:";
//    private static Context context = App.getAppContext();
//
//    /**
//     * 权限请求成功结果监听器表
//     */
//    private static HashMap<String, OnRequestPermissionCallback> permissionList = new HashMap<>();
//
//    /**
//     * 检测权限(默认不强制显示自定义弹窗,取消设置弹窗按钮不杀死APP)
//     * @param permissionCode 权限码，参照PermissionCode.java
//     * @param requestPermissionCallback 权限授权结果回调
//     */
//    public static void checkPermission(Fragment fragment, int permissionCode, OnRequestPermissionCallback requestPermissionCallback) {
//        executeCheckPermission(fragment, permissionCode, new OnRequestPermissionCallback() {
//            @Override
//            public void onGranted() {
//                // 授权成功
//                if (requestPermissionCallback != null) {
//                    requestPermissionCallback.onGranted();
//                }
//            }
//
//            @Override
//            public void onDenied() {
//                // 授权失败
//                if (requestPermissionCallback != null) {
//                    requestPermissionCallback.onDenied();
//                }
//            }
//
//        });
//    }
//
//    /**
//     * 执行检测权限
//     * @param permissionCode 权限码，参照PermissionCode.java
//     * @param requestPermissionCallback 权限授权结果回调
//     */
//    private static void executeCheckPermission(Fragment fragment, int permissionCode, OnRequestPermissionCallback requestPermissionCallback) {
//        try {
//            if (!hasPermission(context, permissionCode)) {
//
//                // 申请权限
//                requestPermission(fragment, permissionCode, requestPermissionCallback);
//
//            } else {
//                // 成功获取权限
//                LogUtils.e("checkPermission: 已经授权！");
//                if (requestPermissionCallback != null) {
//                    requestPermissionCallback.onGranted();
//                }
//
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 是否拥有当前权限
//     * targetSdk >= 23时，系统在6.0及以上的机子才能正常返回权限状态
//     * targetSdk < 23时，只要在AndroidManifest中声明过的权限，默认已授权
//     * @param context Context
//     * @param permissionCode 权限码，参照PermissionCode.java
//     * @return boolean true:已授权，false:无权限
//     */
//    public static boolean hasPermission(Context context, int permissionCode) {
//        return hasPermission(context, getPermission(permissionCode));
//    }
//
//    /**
//     * 是否拥有当前权限
//     * targetSdk >= 23时，系统在6.0及以上的机子才能正常返回权限状态
//     * targetSdk < 23时，只要在AndroidManifest中声明过的权限，默认已授权
//     * @param context Context
//     * @param permission 权限
//     * @return boolean true:有权限，false:无权限
//     */
//    private static boolean hasPermission(Context context, String permission) {
//        // 6.0以下的系统AndroidManifest中声明的权限默认拥有授权
//        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
//            return true;
//        }
//
//        // 6.0及以上的系统需检查权限是否被授权
//        // 参数校验
//        if (context == null || TextUtils.isEmpty(permission)) {
//            return false;
//        }
//        boolean result = ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;
//
//        return result;
//    }
//
//    /**
//     * 申请权限
//     * @param permissionCode 权限码，参照PermissionCode.java
//     * @param requestPermissionCallback 成功获取权限回调
//     */
//    private static void requestPermission(Fragment fragment, int permissionCode, OnRequestPermissionCallback requestPermissionCallback) {
//        // 获取permission
//        String permission = getPermission(permissionCode);
//        if (permission == null) {
//            return;
//        }
//
//        // 添加请求结果监听
//        if (requestPermissionCallback != null && permissionList != null) {
//            permissionList.put(permission, requestPermissionCallback);
//        }
//        // 动态申请权限
//        requestPermission(fragment, permissionCode);
//    }
//
//    /**
//     * 动态申请权限
//     * @param permissionCode 权限码，参照PermissionCode.java
//     */
//    public static void requestPermission(Fragment fragment, int permissionCode) {
//        if (fragment != null) {
//            LogUtils.e("requestPermission: 没有权限，准备申请系统授权！");
//            fragment.requestPermissions( new String[]{getPermission(permissionCode)}, permissionCode);
//        }
//    }
//
//
//    /**
//     * 请求结果回调处理（外部Activity的onRequestPermissionsResult回调用此方法）
//     * @param requestCode 权限请求码，参照PermissionCode.java
//     * @param permissions 权限
//     * @param grantResults 权限请求结果
//     */
//    public static void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//        // 异常情况判断
//        if (permissions == null || permissions.length <= 0 || grantResults == null || grantResults.length <= 0) {
//            LogUtils.e("权限请求结果返回数据为空，onRequestPermissionsResult is empty.");
//            return;
//        }
//
//        LogUtils.e("onRequestPermissionsResult:请求结果回调处理结果：" + requestCode + "==" + grantResults[0]);
//
//        switch (requestCode) {
//            // 存储读写
//            case PERMISSION_READ_EXTERNAL_STORAGE:
//            case PERMISSION_WRITE_EXTERNAL_STORAGE:
//            case PERMISSION_CAMERA:
//                handlePermissionResult(permissions[0], grantResults[0]);
//                break;
//
//            default:
//                break;
//        }
//    }
//
//    /**
//     * 统一处理权限请求结果
//     * @param permission 权限
//     * @param grantResult 权限申请结果,0表示有权限,-1表示无权限
//     */
//    private static void handlePermissionResult(String permission, int grantResult) {
//        if (permissionList == null || !permissionList.containsKey(permission)) {
//            return;
//        }
//
//        OnRequestPermissionCallback callback = permissionList.get(permission);
//        if (callback == null) {
//            return;
//        }
//        // 权限结果回调
//        if (grantResult == PackageManager.PERMISSION_GRANTED) {
//            callback.onGranted();
//        } else {
//            callback.onDenied();
//        }
//    }
//
//    /**
//     * 动态申请权限组
//     * @param permissionCodes 权限码，参照PermissionCode.java
//     */
//    public static void checkPermissions(Activity activity, int[] permissionCodes) {
//        try {
//            // 需要申请的权限
//            ArrayList<Integer> needPermissions = new ArrayList<>();
//            for (int pd : permissionCodes) {
//                boolean hasPermission = hasPermission(activity, pd);
//                if (!hasPermission) {
//                    needPermissions.add(pd);
//                }
//            }
//
//            if (activity != null && needPermissions.size() > 0) {
//                LogUtils.e("requestPermission: 没有权限，准备申请系统授权！");
//                String[] permissions = new String[needPermissions.size()];
//                int permissionCode = 0;
//                for (int i = 0; i < permissions.length; i++) {
//                    int code = needPermissions.get(i);
//                    permissions[i] = getPermission(code);
//                    permissionCode += code;
//                }
//                ActivityCompat.requestPermissions(activity, permissions, permissionCode);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//
//     * 引导用户到系统设置页面
//
//     */
//
//    public static void GuidePermission(Context context){
//        LogUtils.d("用户点击不要再弹窗申请窗口");
//        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
//        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        intent.setData(Uri.parse(PACKAGE_HEADER + context.getPackageName()));
//        context.startActivity(intent);
//    }
//    private void showGuideDialog() {
//        BasicConfirmButtonDialog guideDialog=new BasicConfirmButtonDialog(this, "确定", "需求权限");
//        guideDialog.setClickListener(new BasicConfirmButtonDialog.BasicConfirmButtonDialogListener() {
//            @Override
//            public void onTvYesListener() {
//                GuidePermission(App.getAppContext());
//                guideDialog.cancel();
//            }
//        });
//        guideDialog.show();
//    }
//    /**
//     * 根据权限码获取权限
//     * @param permissionCode 权限码，参照[PermissionCode].
//     * @return java.lang.String 权限
//     */
//    public static String getPermission(int permissionCode) {
//        String permission;
//
//        switch (permissionCode) {
//            case PERMISSION_READ_EXTERNAL_STORAGE:
//                permission = Manifest.permission.READ_EXTERNAL_STORAGE;
//                break;
//            case PERMISSION_WRITE_EXTERNAL_STORAGE:
//                permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
//                break;
//            case PERMISSION_CAMERA:
//                permission = Manifest.permission.CAMERA;
//                break;
//            case ACCESS_COARSE_LOCATION:
//                permission = Manifest.permission.ACCESS_COARSE_LOCATION;
//                break;
//            case ACCESS_FINE_LOCATION:
//                permission = Manifest.permission.ACCESS_FINE_LOCATION;
//                break;
//            case READ_PHONE_STATE:
//                permission = Manifest.permission.READ_PHONE_STATE;
//                break;
//            case BACK_LOCATION_PERMISSION:
//                permission = "android.permission.ACCESS_BACKGROUND_LOCATION";
//                break;
//            default:
//                permission = "";
//                break;
//        }
//        return permission;
//    }
//
//    /**
//     * 请求授权结果回调
//     */
//    public interface OnRequestPermissionCallback {
//
//        /**
//         * 授权成功
//         */
//        void onGranted();
//
//        /**
//         * 授权失败
//         */
//        void onDenied();
//
//    }
//}
